// 导入 express 模块
const { urlencoded } = require('express');
const express = require('express');

// 创建 express 的服务器实例
const app = express();

// 配置中间件
app.use(express.urlencoded({extended: false}));
app.use(express.json());
// 托管静态资源
app.use(express.static("./pages"));

// 配置session
const session = require("express-session")
app.use(
    session({
        secret:"cbuiancv nsoasduichn ouzs",
        resave: false,
        saveUninitialized:false,
    }),
);

// 初始化一个 存储接收数据变量
let user = [
    {
        uname:"admin",
        upwd:"admin",
    },
];

// post发送数据 注册接口
app.post("/regist", (req, res)=> {
    // 账号密码不能为空
    const username = req.body.username;
    const password = req.body.password;
    if (!username || !password) {
        res.send({
            msg:"账号密码不能为空",
            status:0,   //返回状态码
        });
    } else {
        // 2.用户是否存在
        const idx = user.findIndex(
            (user)=>{
                return user.uname === username; // 存在返回1 不存在返回-1
            }
        );
        if (idx == -1) {
            // 2.1 未存在
            user.push({
                uname:username,
                upwd:password,
            });
            res.send({
                msg:"用户不存在，添加",
                ststus:1,
            });
        } else {
            // 2.2 已存在
            res.send({
                msg:"该用户已存在",
                status:0,
            });
        }
    }
});

// 登录接口
app.post("/login", (req,res) => {
    const username = req.body.username;
    const password = req.body.password;
    // 1.判断是否为空
    if (!username || !password) {
        res.send({
            msg:"账号密码不能为空",
            status:0,
        });
    } else {
        // 2.账号密码是否正确
        const idx = user.findIndex(
            (user)=> {
                return user.uname == username && user.upwd == password;
            }
        );
        if (idx == -1) {    // -1 不正确
            res.send({
                msg:"账号密码不正确",
                status:0,
            });
        } else {
            // 重要！！！
            // 将用户的关键信息，存储到session中，
            // 同时，session中间件会向响应头中注入Cookie信息(响应头Set-Cookie字段)，随着本次响应发送给前端。
            // 方式一：
            // req.session.userInfo = req.body;
            // 方式二：随意添加
            req.session.userInfo = {
                info:req.body,
                love:"敲代码",
            };

            res.send({
                msg:"账号密码正确,登录成功",
                status:1,
                // 返回给前端登录成功账户信息
                userInfo:{
                    nickname:username,
                    desc: "其他个人信息",
                },
            });
        }
    }
});

// 验证是否授权的中间件
function checkAuth(req, res, next) {
    const userInfo = req.session.userInfo;
    if (userInfo) next();
    else {
        res.send({
            msg:"需要授权登录",
            status:1,
        });
    }
}

// 购物车接口（需授权）
app.get("/cart", checkAuth, (req, res) => {
    res.send({
        carts: [
            {id:1,title:"苹果"},
            {id:2,title:"香蕉"},
        ]
    });
});

// 个人订单接口（需授权）


// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(9000, function () {
      console.log('服务器已启动, 127.0.0.1:9000');
});